#include <iostream>
#include <string>
#include <vector>

#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/io/vlp_grabber.h>
#include <pcl/console/parse.h>
#include <pcl/visualization/pcl_visualizer.h>

using namespace std;
using namespace pcl;
int main(int argc, char *argv[])
{

	//获取pcap文件路径
  string pcap;
	pcl::console::parse_argument( argc, argv, "-pcap", pcap );

	//点云指针
	PointCloud<PointXYZI>::ConstPtr cloud_ptr;

	//创建可视化窗口
	auto view_ptr=new visualization::PCLVisualizer("SHOW pcapfile");

	//设置坐标系统
	view_ptr->addCoordinateSystem(4,"pcap");

	//着色方法
	//visualization::PointCloudColorHandler<PointXYZI>::Ptr
	auto color_handler=new visualization::PointCloudColorHandlerGenericField
					<PointXYZI>( "intensity" );

	//点云采集卡实例对象
	HDLGrabber grabber("",pcap);


	//开始采集
	grabber.start();

	//回调函数,获取点云指针。
	boost::function<void( const PointCloud<PointXYZI>::ConstPtr& )> call_back =
					[ &cloud_ptr]( const PointCloud<PointXYZI>::ConstPtr& ptr ){
							cloud_ptr = ptr;
					};

	//注册回调函数
	grabber.registerCallback(call_back);
	while (!view_ptr->wasStopped())
	{
		view_ptr->spinOnce(); //刷新屏幕

		if(!cloud_ptr)
			continue;
		assert(cloud_ptr!= nullptr);
		//着色
		color_handler->setInputCloud(cloud_ptr);
		//更新点云
		if(!view_ptr->updatePointCloud(cloud_ptr,*color_handler))
			view_ptr->addPointCloud(cloud_ptr,*color_handler);

	}

	return 0;
}